import axios from '../utils/axios'
import apis from '../apis/api'

	//自定义一个函数，将数据转换成树形结构
	const toTree=(data)=>{  //data是个数组allMenu，里面存的是8个对象
		var rs={};
		for(let i=0;i<data.length;i++){
			var permission=data[i];//得到每一组数组
			//判断它id为0，则为一级元素(一级导航栏)
			if(permission.parentid==0){
//				rs.push(permission);
				//如果它为一级元素，就给它插入个key(children)来存放它的子级元素
				permission.children=[];
				//rs是一个对象，permission._id作为key,permission作为value
				rs[permission._id]=permission;
			}
		}
		
		
		for(let i=0;i<data.length;i++){
			var permission=data[i];//拿到8个数组
			for(var key in rs){
				//判断8个数组里面的父级id是否等于一级元素的id
				if(permission.parentid==key){
					//等于就把数组插入rs对象里的children,就是一级元素的子元素
					rs[key].children.push(permission);
				}
			}
		}
		console.log(rs);
		return rs;
	}
	
	
	
	
	//存储和system模块相关的所有属性的值(状态)
	const state={
			allMenu:[],
			allPermission:[],//所有的权限，这个选项只有在系统管理员的角色下才会显示
			allRoles:[],
			allGames:[]
			
	}
	//所有同步修改的状态的行为都在mutation里面的函数执行
	const mutations={
		FRESHALLMENU(state,payload){
			state.allMenu=payload;
		},
		LOADALLPERMISSION(state,payload){
			state.allPermission=payload;
		},
		LOADALLROLES(state,payload){
			state.allRoles=payload;
		},
		LOADALLGAMES(state,payload){
			state.allGames=payload;
		}
		
		
	}
	//计算属性，vuex的每个模块都有和store对象一样的方法和属性
	const getters={
		allMenu(state){
			return toTree(state.allMenu);
		},
		allPermission(state){
			return toTree(state.allPermission);//处理成树形结构，返到给权限界面
		},
		allRoles(state){
			return state.allRoles;
		},
		allGames(state){
			return state.allGames;
		}
		
	}
	//异步数据的请求在这里执行，并提交返回给mutations的函数进行状态的变更
	const actions={
		//context.commit是一个对象
		loadAllPermission({commit},payload){
			//发起请求获取所有权限
//			console.log(apis.findAllPermission);
			axios.get(apis.findAllPermission)  //一般发起get请求拿数据,就要记得引用axios和apis
			.then((resp)=>{
				console.log(resp);
				commit('LOADALLPERMISSION',resp.data.allPermission)//拿到所有的权限提交给mutations
			})
		},
		loadAllRoles(context,payload){
			axios.get(apis.findAllRoles)
			.then((resp)=>{
				console.log(resp);
				console.log(resp.data.allRoles)
				context.commit('LOADALLROLES',resp.data.allRoles)
			})
		},
		loadAllGames({commit},payload){
			axios.get(apis.findAllGames)
			.then((resp)=>{
				console.log(resp.data.data);
				commit('LOADALLGAMES',resp.data.data)
			})
		}
		
	}
	
export default{
	state,
	mutations,
	getters,
	actions
}
